package com.harmontronics.hanma.paas.paas.domain.app.repository.mapper;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.harmontronics.hanma.paas.paas.domain.app.repository.po.HmModelPO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.harmontronics.hanma.paas.paas.domain.app.repository.po.HmVirtualModelPO;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.Param;

/**
 * ${comments}
 *
 * @author paas-generator
 * @email paas-generator@harmontronics.com
 * @date 2021-03-31 16:40:00
 */
@Mapper
public interface HmModelMapper extends BaseMapper<HmModelPO> {

    /**
     * 创建表
     */
    int createTable(String tableName);

    /**
     * 创建表 支持流程
     */
    int createTableWoProcess(String tableName);

    /**
     * 删除表
     */
    int dropTable(String tableName);

    /**
     * 动态插入表数据
     */
    int dynamicInsert(HmVirtualModelPO virtualModelPO);

    /**
     * 批量insert
     * @return
     */
    int dynamicInsertInBatch(String tableName,String keys,String values);

    /**
     * 动态修改表数据
     */
    int dynamicUpdate(HmVirtualModelPO virtualModelPO);

    /**
     * 清空表数据
     * @param modelCode
     * @return
     */
    int dynamicTruncateData(String modelCode);

    /**
     * 动态删除表数据
     */
    int dynamicDelete(String modelCode, Long id);

    /**
     * 动态获取数据
     */
    List<Map<String, Object>> dynamicList(String tableName, String where, String orderBy);

    /**
     * 动态查询数据
     */
    List<Map<String, Object>> dynamicListWithLimit(@Param("tableName") String tableName,
            @Param("whereSql") String whereSql, @Param("orderBySql") String orderBySql,
            @Param("limitSql") String limitSql);

    /**
     * 动态获取分页数据
     */
    IPage<Map<String, Object>> dynamicPageList(String tableName, String where, String orderBy,
            Page page);

    /**
     * 根据ID获取数据
     */
    Map<String, Object> dynamicGet(String tableName, Long id);

    /**
     * 根据ids批量获取
     * @param tableName
     * @param ids
     * @return
     */
    List<Map<String, Object>> dynamicGetByIds(String tableName, String columns,String ids);

    /**
     * 查询关联的子表明细数据
     * @param tableName
     * @param relationColumn
     * @param parentId
     * @return
     */
    List<Map<String, Object>> dynamicGetSubTableData(String tableName, String relationColumn, Long parentId);

    /**
     * 创建树状模型
     */
    void createTableWoTree(String code);
}
